<?php
namespace App\Lib\Util;

class PinyinConvertor
{
  	private $pylist = [
    		'a'=>-20319,
    		'ai'=>-20317,
    		'an'=>-20304,
    		'ang'=>-20295,
    		'ao'=>-20292,
    		'ba'=>-20283,
    		'bai'=>-20265,
    		'ban'=>-20257,
    		'bang'=>-20242,
    		'bao'=>-20230,
    		'bei'=>-20051,
    		'ben'=>-20036,
    		'beng'=>-20032,
    		'bi'=>-20026,
    		'bian'=>-20002,
    		'biao'=>-19990,
    		'bie'=>-19986,
    		'bin'=>-19982,
    		'bing'=>-19976,
    		'bo'=>-19805,
    		'bu'=>-19784,
    		'ca'=>-19775,
    		'cai'=>-19774,
    		'can'=>-19763,
    		'cang'=>-19756,
    		'cao'=>-19751,
    		'ce'=>-19746,
    		'ceng'=>-19741,
    		'cha'=>-19739,
    		'chai'=>-19728,
    		'chan'=>-19725,
    		'chang'=>-19715,
    		'chao'=>-19540,
    		'che'=>-19531,
    		'chen'=>-19525,
    		'cheng'=>-19515,
    		'chi'=>-19500,
    		'chong'=>-19484,
    		'chou'=>-19479,
    		'chu'=>-19467,
    		'chuai'=>-19289,
    		'chuan'=>-19288,
    		'chuang'=>-19281,
    		'chui'=>-19275,
    		'chun'=>-19270,
    		'chuo'=>-19263,
    		'ci'=>-19261,
    		'cong'=>-19249,
    		'cou'=>-19243,
    		'cu'=>-19242,
    		'cuan'=>-19238,
    		'cui'=>-19235,
    		'cun'=>-19227,
    		'cuo'=>-19224,
    		'da'=>-19218,
    		'dai'=>-19212,
    		'dan'=>-19038,
    		'dang'=>-19023,
    		'dao'=>-19018,
    		'de'=>-19006,
    		'deng'=>-19003,
    		'di'=>-18996,
    		'dian'=>-18977,
    		'diao'=>-18961,
    		'die'=>-18952,
    		'ding'=>-18783,
    		'diu'=>-18774,
    		'dong'=>-18773,
    		'dou'=>-18763,
    		'du'=>-18756,
    		'duan'=>-18741,
    		'dui'=>-18735,
    		'dun'=>-18731,
    		'duo'=>-18722,
    		'e'=>-18710,
    		'en'=>-18697,
    		'er'=>-18696,
    		'fa'=>-18526,
    		'fan'=>-18518,
    		'fang'=>-18501,
    		'fei'=>-18490,
    		'fen'=>-18478,
    		'feng'=>-18463,
    		'fo'=>-18448,
    		'fou'=>-18447,
    		'fu'=>-18446,
    		'ga'=>-18239,
    		'gai'=>-18237,
    		'gan'=>-18231,
    		'gang'=>-18220,
    		'gao'=>-18211,
    		'ge'=>-18201,
    		'gei'=>-18184,
    		'gen'=>-18183,
    		'geng'=>-18181,
    		'gong'=>-18012,
    		'gou'=>-17997,
    		'gu'=>-17988,
    		'gua'=>-17970,
    		'guai'=>-17964,
    		'guan'=>-17961,
    		'guang'=>-17950,
    		'gui'=>-17947,
    		'gun'=>-17931,
    		'guo'=>-17928,
    		'ha'=>-17922,
    		'hai'=>-17759,
    		'han'=>-17752,
    		'hang'=>-17733,
    		'hao'=>-17730,
    		'he'=>-17721,
    		'hei'=>-17703,
    		'hen'=>-17701,
    		'heng'=>-17697,
    		'hong'=>-17692,
    		'hou'=>-17683,
    		'hu'=>-17676,
    		'hua'=>-17496,
    		'huai'=>-17487,
    		'huan'=>-17482,
    		'huang'=>-17468,
    		'hui'=>-17454,
    		'hun'=>-17433,
    		'huo'=>-17427,
    		'ji'=>-17417,
    		'jia'=>-17202,
    		'jian'=>-17185,
    		'jiang'=>-16983,
    		'jiao'=>-16970,
    		'jie'=>-16942,
    		'jin'=>-16915,
    		'jing'=>-16733,
    		'jiong'=>-16708,
    		'jiu'=>-16706,
    		'ju'=>-16689,
    		'juan'=>-16664,
    		'jue'=>-16657,
    		'jun'=>-16647,
    		'ka'=>-16474,
    		'kai'=>-16470,
    		'kan'=>-16465,
    		'kang'=>-16459,
    		'kao'=>-16452,
    		'ke'=>-16448,
    		'ken'=>-16433,
    		'keng'=>-16429,
    		'kong'=>-16427,
    		'kou'=>-16423,
    		'ku'=>-16419,
    		'kua'=>-16412,
    		'kuai'=>-16407,
    		'kuan'=>-16403,
    		'kuang'=>-16401,
    		'kui'=>-16393,
    		'kun'=>-16220,
    		'kuo'=>-16216,
    		'la'=>-16212,
    		'lai'=>-16205,
    		'lan'=>-16202,
    		'lang'=>-16187,
    		'lao'=>-16180,
    		'le'=>-16171,
    		'lei'=>-16169,
    		'leng'=>-16158,
    		'li'=>-16155,
    		'lia'=>-15959,
    		'lian'=>-15958,
    		'liang'=>-15944,
    		'liao'=>-15933,
    		'lie'=>-15920,
    		'lin'=>-15915,
    		'ling'=>-15903,
    		'liu'=>-15889,
    		'long'=>-15878,
    		'lou'=>-15707,
    		'lu'=>-15701,
    		'lv'=>-15681,
    		'luan'=>-15667,
    		'lue'=>-15661,
    		'lun'=>-15659,
    		'luo'=>-15652,
    		'ma'=>-15640,
    		'mai'=>-15631,
    		'man'=>-15625,
    		'mang'=>-15454,
    		'mao'=>-15448,
    		'me'=>-15436,
    		'mei'=>-15435,
    		'men'=>-15419,
    		'meng'=>-15416,
    		'mi'=>-15408,
    		'mian'=>-15394,
    		'miao'=>-15385,
    		'mie'=>-15377,
    		'min'=>-15375,
    		'ming'=>-15369,
    		'miu'=>-15363,
    		'mo'=>-15362,
    		'mou'=>-15183,
    		'mu'=>-15180,
    		'na'=>-15165,
    		'nai'=>-15158,
    		'nan'=>-15153,
    		'nang'=>-15150,
    		'nao'=>-15149,
    		'ne'=>-15144,
    		'nei'=>-15143,
    		'nen'=>-15141,
    		'neng'=>-15140,
    		'ni'=>-15139,
    		'nian'=>-15128,
    		'niang'=>-15121,
    		'niao'=>-15119,
    		'nie'=>-15117,
    		'nin'=>-15110,
    		'ning'=>-15109,
    		'niu'=>-14941,
    		'nong'=>-14937,
    		'nu'=>-14933,
    		'nv'=>-14930,
    		'nuan'=>-14929,
    		'nue'=>-14928,
    		'nuo'=>-14926,
    		'o'=>-14922,
    		'ou'=>-14921,
    		'pa'=>-14914,
    		'pai'=>-14908,
    		'pan'=>-14902,
    		'pang'=>-14894,
    		'pao'=>-14889,
    		'pei'=>-14882,
    		'pen'=>-14873,
    		'peng'=>-14871,
    		'pi'=>-14857,
    		'pian'=>-14678,
    		'piao'=>-14674,
    		'pie'=>-14670,
    		'pin'=>-14668,
    		'ping'=>-14663,
    		'po'=>-14654,
    		'pu'=>-14645,
    		'qi'=>-14630,
    		'qia'=>-14594,
    		'qian'=>-14429,
    		'qiang'=>-14407,
    		'qiao'=>-14399,
    		'qie'=>-14384,
    		'qin'=>-14379,
    		'qing'=>-14368,
    		'qiong'=>-14355,
    		'qiu'=>-14353,
    		'qu'=>-14345,
    		'quan'=>-14170,
    		'que'=>-14159,
    		'qun'=>-14151,
    		'ran'=>-14149,
    		'rang'=>-14145,
    		'rao'=>-14140,
    		're'=>-14137,
    		'ren'=>-14135,
    		'reng'=>-14125,
    		'ri'=>-14123,
    		'rong'=>-14122,
    		'rou'=>-14112,
    		'ru'=>-14109,
    		'ruan'=>-14099,
    		'rui'=>-14097,
    		'run'=>-14094,
    		'ruo'=>-14092,
    		'sa'=>-14090,
    		'sai'=>-14087,
    		'san'=>-14083,
    		'sang'=>-13917,
    		'sao'=>-13914,
    		'se'=>-13910,
    		'sen'=>-13907,
    		'seng'=>-13906,
    		'sha'=>-13905,
    		'shai'=>-13896,
    		'shan'=>-13894,
    		'shang'=>-13878,
    		'shao'=>-13870,
    		'she'=>-13859,
    		'shen'=>-13847,
    		'sheng'=>-13831,
    		'shi'=>-13658,
    		'shou'=>-13611,
    		'shu'=>-13601,
    		'shua'=>-13406,
    		'shuai'=>-13404,
    		'shuan'=>-13400,
    		'shuang'=>-13398,
    		'shui'=>-13395,
    		'shun'=>-13391,
    		'shuo'=>-13387,
    		'si'=>-13383,
    		'song'=>-13367,
    		'sou'=>-13359,
    		'su'=>-13356,
    		'suan'=>-13343,
    		'sui'=>-13340,
    		'sun'=>-13329,
    		'suo'=>-13326,
    		'ta'=>-13318,
    		'tai'=>-13147,
    		'tan'=>-13138,
    		'tang'=>-13120,
    		'tao'=>-13107,
    		'te'=>-13096,
    		'teng'=>-13095,
    		'ti'=>-13091,
    		'tian'=>-13076,
    		'tiao'=>-13068,
    		'tie'=>-13063,
    		'ting'=>-13060,
    		'tong'=>-12888,
    		'tou'=>-12875,
    		'tu'=>-12871,
    		'tuan'=>-12860,
    		'tui'=>-12858,
    		'tun'=>-12852,
    		'tuo'=>-12849,
    		'wa'=>-12838,
    		'wai'=>-12831,
    		'wan'=>-12829,
    		'wang'=>-12812,
    		'wei'=>-12802,
    		'wen'=>-12607,
    		'weng'=>-12597,
    		'wo'=>-12594,
    		'wu'=>-12585,
    		'xi'=>-12556,
    		'xia'=>-12359,
    		'xian'=>-12346,
    		'xiang'=>-12320,
    		'xiao'=>-12300,
    		'xie'=>-12120,
    		'xin'=>-12099,
    		'xing'=>-12089,
    		'xiong'=>-12074,
    		'xiu'=>-12067,
    		'xu'=>-12058,
    		'xuan'=>-12039,
    		'xue'=>-11867,
    		'xun'=>-11861,
    		'ya'=>-11847,
    		'yan'=>-11831,
    		'yang'=>-11798,
    		'yao'=>-11781,
    		'ye'=>-11604,
    		'yi'=>-11589,
    		'yin'=>-11536,
    		'ying'=>-11358,
    		'yo'=>-11340,
    		'yong'=>-11339,
    		'you'=>-11324,
    		'yu'=>-11303,
    		'yuan'=>-11097,
    		'yue'=>-11077,
    		'yun'=>-11067,
    		'za'=>-11055,
    		'zai'=>-11052,
    		'zan'=>-11045,
    		'zang'=>-11041,
    		'zao'=>-11038,
    		'ze'=>-11024,
    		'zei'=>-11020,
    		'zen'=>-11019,
    		'zeng'=>-11018,
    		'zha'=>-11014,
    		'zhai'=>-10838,
    		'zhan'=>-10832,
    		'zhang'=>-10815,
    		'zhao'=>-10800,
    		'zhe'=>-10790,
    		'zhen'=>-10780,
    		'zheng'=>-10764,
    		'zhi'=>-10587,
    		'zhong'=>-10544,
    		'zhou'=>-10533,
    		'zhu'=>-10519,
    		'zhua'=>-10331,
    		'zhuai'=>-10329,
    		'zhuan'=>-10328,
    		'zhuang'=>-10322,
    		'zhui'=>-10315,
    		'zhun'=>-10309,
    		'zhuo'=>-10307,
    		'zi'=>-10296,
    		'zong'=>-10281,
    		'zou'=>-10274,
    		'zu'=>-10270,
    		'zuan'=>-10262,
    		'zui'=>-10260,
    		'zun'=>-10256,
    		'zuo'=>-10254
  	];

  	public function getAllPY($chinese, $delimiter = '', $length = 0)
    {
    		$py = $this->convertToAllPinyin($chinese, $delimiter);
    		if($length) {
    			  $py = substr($py, 0, $length);
    		}
    		return $py;
  	}

  	public function getFirstPY($chinese)
    {
    		$result = '' ;
    		for ($i=0; $i<strlen($chinese); $i++) {
      			$p = ord(substr($chinese,$i,1));
      			if ($p>160) {
        				$q = ord(substr($chinese,++$i,1));
        				$p = $p*256 + $q - 65536;
      			}
      			$result .= substr($this->convertToPinyin($p),0,1);
    		}
    		return $result ;
  	}

  	private function convertToPinyin($num, $blank = '')
    {
    		if($num>0 && $num<160 ) {
    			   return chr($num);
    		} elseif ($num<-20319||$num>-10247) {
    			   return $blank;
    		} else {
      			foreach ($this->pylist as $py => $code) {
        				if($code > $num) break;
        				$result = $py;
      			}
      			return $result;
    		}
  	}

  	private function convertToAllPinyin($chinese, $delimiter = ' ', $first=0)
    {
    		$result = array();
    		for($i=0; $i<strlen($chinese); $i++) {
      			$p = ord(substr($chinese,$i,1));
      			if($p > 160) {
        				$q = ord(substr($chinese,++$i,1));
        				$p = $p*256 + $q - 65536;
      			}
      			$result[] = $this->convertToPinyin($p);
      			if ($first) {
        				return $result[0];
      			}
    		}
    		return implode($delimiter, $result);
  	}
}
